package main

// $ go mod init github.com/zhangxi/grpc_greeter_client
// $ ==> go mod init grpc_greeter_client
// $ go mod tidy  #==> 下载项目中引入的第三方包, 因为这里是直接从 "/server/greeter/proto/" 目录复制过来的, 我们需要 "$ go mod tidy" 获取依赖包,
// $ protoc --go_out=plugins=grpc:./ *.proto    // 使用 protoc-gen-go.exe
// $ 而不再是 protoc --go_out=./ order.proto

import (
	"context"
	"fmt"
	"google.golang.org/grpc"
	"google.golang.org/grpc/credentials/insecure"
	"grpc_greeter_client/proto/greeterService"
)

func main() {
	/*
		// 1. jsonrpc 用 net.Dial() 和 jsonrpc 微服务端建立连接,
		// 这里不再是 rpc.Dial("tcp", "10.4.7.17:8080"),
		conn, err1 := net.Dial("tcp", "127.0.0.1:8080")
		// conn, err1 := net.Dial("tcp", "10.4.7.17:8080")
		if err1 != nil {
			fmt.Println("rpc.Dial() err:", err1)
		}
		// 2.当客户端退出的时候关闭连接,
		defer conn.Close()
		// 3.建立基于 json 编解码的 rpc 服务,
		client := rpc.NewClientWithCodec(jsonrpc.NewClientCodec(conn))
		// 4.调用远程函数, 数据是 {"method":"hello_service.SayHello","params":["zhangsan"],"id":0} ,
		var reply string
		err2 := client.Call("hello_service.SayHello", "zhangsan", &reply)
		if err2 != nil {
			fmt.Println("client.Call() err:", err2)
			return
		}
		// 5.获取微服务返回的数据,
		fmt.Println(reply)
	*/

	// 1.建立 tcp 连接,
	conn, err := grpc.Dial("127.0.0.1:8080", grpc.WithTransportCredentials(insecure.NewCredentials()))
	if err != nil {
		fmt.Println("grpc.Dial() err:", err)
		return
	}
	// 2.注册客户端,
	client := greeterService.NewGreeterClient(conn)
	// 3.调用远程函数,
	resp, err := client.SayHello(context.Background(), &greeterService.HelloReq{Name: "zhangsan"})
	if err != nil {
		fmt.Println("client.SayHello() err:", err)
		return
	}
	// 4.获取微服务返回的数据,
	fmt.Printf("%#v\n", resp)
	fmt.Println(resp.GetMessage())
}
